package com.whmskj.xjlhsc.mobie.personnelFile.service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import com.whmskj.xjlhsc.mobie.personnelFile.dto.LeaveApplicationListDTO;
import com.whmskj.xjlhsc.mobie.personnelFile.dto.LeaveApplicationDetailDTO;

public interface LeaveApplicationService {

    List<String> leaveTypes();

    // 员工搜索（用于选择器）
    List<Map<String, Object>> searchEmployees(String keyword, Integer limit);

    // 当前登录人档案（通过 corp_member.userid -> nick -> 员工档案）
    Map<String, Object> currentEmployeeProfileByUserId(String memberId);

    // 新建：保存为草稿/提交
    int create(Map<String, Object> payload, boolean submit);

    // 更新草稿
    int updateDraft(Integer id, Map<String, Object> payload);

    // 提交（草稿->待审核）
    int submit(Integer id, Integer approverId, String approverName);

    // 撤销
    int cancel(Integer id, String cancelReason);

    // 审批通过/驳回
    int approve(Integer id, Integer approverId, String approverName);
    int reject(Integer id, Integer approverId, String approverName, String reason);

    // 列表 & 详情
    List<LeaveApplicationListDTO> list(Integer employeeId, String employeeName, String status, LocalDateTime startFrom, LocalDateTime endTo);
    LeaveApplicationDetailDTO detail(Integer id);

    // 仅查询当前用户的请假单
    List<LeaveApplicationListDTO> listMine(Integer myEmployeeId, String employeeName, String status, LocalDateTime startFrom, LocalDateTime endTo);

    // 他人已审核 + 我的全部
    List<LeaveApplicationListDTO> listAllView(Integer myEmployeeId, String employeeName, LocalDateTime startFrom, LocalDateTime endTo);

    // 待我审批（当前节点）
    List<LeaveApplicationListDTO> listPendingForApprover(Integer approverId, String employeeName, LocalDateTime startFrom, LocalDateTime endTo);


    /**
     * 我已处理（按参数区分：approved/rejected）
     */
    List<LeaveApplicationListDTO> listHandledByMe(Integer myEmployeeId, String result, String employeeName, LocalDateTime startFrom, LocalDateTime endTo);

    // 列表同条件的性别统计
    Map<String, Object> listGenderSummary(Integer employeeId, String employeeName, String status, LocalDateTime startFrom, LocalDateTime endTo);

}

